package sistemadecompras.datos;

import java.sql.CallableStatement;
import sistemadecompras.datos.OperacionesBase;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import sistemadecompras.negocio.Ciudad;
import sistemadecompras.negocio.Cliente;
import sistemadecompras.negocio.ClienteEstadistica;
import sistemadecompras.negocio.Compra;
import sistemadecompras.negocio.Direccion;
import sistemadecompras.negocio.Factura;
import sistemadecompras.negocio.Logue;
import sistemadecompras.negocio.Producto;
import sistemadecompras.negocio.Proveedor;
import sistemadecompras.negocio.Usuario;
import sistemadecompras.negocio.Venta;
import sistemadecompras.negocio.ventasDescuento;

public class BaseDeDatosDB {

    public boolean grabarCliente(Cliente miCliente) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into cliente values('" + miCliente.getCedula() + "','" + miCliente.getNombre() + "','" + miCliente.getApellido()
                + "','" + miCliente.getTelefono() + "','" + miCliente.getId_dir() + "','" + "0" + "','" + miCliente.getId_ciudad() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarCliente(Cliente miCliente) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update cliente set nombre='" + miCliente.getNombre() + "', apellido='" + miCliente.getApellido()
                + "', telefono='" + miCliente.getTelefono() + "', id_dir='" + miCliente.getId_dir() + "', id_ciudad='" + miCliente.getId_ciudad()
                + "' where cedula='" + miCliente.getCedula() + "'";

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int eliminarCliente(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from cliente where cedula='" + cedula + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Cliente buscarCliente(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from cliente where cedula ='" + cedula + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Cliente miCliente = null;
        if (resultado != null) {
            resultado.next();
            miCliente = new Cliente();
            miCliente.setCedula(resultado.getString("Cedula"));
            miCliente.setNombre(resultado.getString("Nombre"));
            miCliente.setApellido(resultado.getString("Apellido"));
            miCliente.setTelefono(resultado.getString("Telefono"));
            miCliente.setId_dir(resultado.getInt("Id_dir"));
            miCliente.setId_ciudad(resultado.getInt("Id_ciudad"));
        }
        db.cerrarConexion();
        return miCliente;
    }

    public ArrayList listarCliente() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from cliente ";
        ResultSet resultado = db.seleccion(query);
        Cliente miCliente = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miCliente = new Cliente();
            miCliente.setCedula(resultado.getString(1));
            miCliente.setNombre(resultado.getString(2));
            miCliente.setApellido(resultado.getString(3));
            miCliente.setTelefono(resultado.getString(4));
            miCliente.setId_dir(resultado.getInt(5));
            miCliente.setNum_facturas(resultado.getInt(6));
            miCliente.setId_ciudad(resultado.getInt(7));
            todos.add(miCliente);
        }
        db.cerrarConexion();
        return todos;
    }
    //////////////////////////////////////// MANTENIMIENTO CIUDADES ///////////////////////////////////

    public boolean grabarCiudad(Ciudad miCiudad) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into ciudad (ciudad) values('" + miCiudad.getCiudad() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarCiudad(Ciudad miCiudad) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update ciudad set ciudad='" + miCiudad.getCiudad() + "' where id_ciudad='" + miCiudad.getId_ciudad() + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int eliminarCiudad(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from ciudad where id_ciudad='" + codigo + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Ciudad buscarCiudad(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from ciudad where id_ciudad ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Ciudad miCiudad = null;
        if (resultado != null) {
            resultado.next();
            miCiudad = new Ciudad();
            try {
                miCiudad.setId_ciudad(resultado.getInt("Id_ciudad"));
                miCiudad.setCiudad(resultado.getString("Ciudad"));
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Busqueda sin Resultados");
            }
        }
        db.cerrarConexion();
        return miCiudad;
    }

    public Ciudad buscarCodigodeCiudadNueva(String nombre) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from ciudad where ciudad ='" + nombre + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Ciudad miCiudad = null;
        if (resultado != null) {
            resultado.next();
            miCiudad = new Ciudad();
            try {
                miCiudad.setId_ciudad(resultado.getInt("Id_ciudad"));
                miCiudad.setCiudad(resultado.getString("Ciudad"));
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Busqueda sin Resultados");
            }
        }
        db.cerrarConexion();
        return miCiudad;
    }

    public ArrayList listarCiudad() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from ciudad ";
        ResultSet resultado = db.seleccion(query);
        Ciudad miCiudad = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miCiudad = new Ciudad();
            miCiudad.setId_ciudad(resultado.getInt(1));
            miCiudad.setCiudad(resultado.getString(2));
            todos.add(miCiudad);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarIds() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id_ciudad from ciudad ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {

            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }

    ///////////////////////////////MANTENIMIENTO DIRECCIONES///////////////////////////////////////
    public boolean grabarDireccion(Direccion miDireccion) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into direccion (calle, numero,id_ciudad) values('" + miDireccion.getCalle() + "','" + miDireccion.getNumero() + "','" + miDireccion.getId_ciudad() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarDireccion(Direccion miDireccion) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update direccion set calle='" + miDireccion.getCalle() + "', numero='" + miDireccion.getNumero()
                + "', id_ciudad='" + miDireccion.getId_ciudad()
                + "' where id_dir='" + miDireccion.getId_dir() + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int eliminarDireccion(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from direccion where id_dir='" + codigo + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Direccion buscarDireccion(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from direccion where id_dir ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Direccion miDireccion = null;
        if (resultado != null) {
            resultado.next();
            miDireccion = new Direccion();
            miDireccion.setId_dir(resultado.getInt("Id_dir"));
            miDireccion.setCalle(resultado.getString("Calle"));
            miDireccion.setNumero(resultado.getString("Numero"));
            miDireccion.setId_ciudad(resultado.getInt("ciudad"));
        }
        db.cerrarConexion();
        return miDireccion;
    }

    public ArrayList listarDireccion() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from direccion ";
        ResultSet resultado = db.seleccion(query);
        Direccion miDireccion = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miDireccion = new Direccion();
            miDireccion.setId_dir(resultado.getInt(1));
            miDireccion.setCalle(resultado.getString(2));
            miDireccion.setNumero(resultado.getString(3));
            miDireccion.setId_ciudad(resultado.getInt(4));
            todos.add(miDireccion);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarIdDir() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id_dir from direccion ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {

            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }
    ///////////////////////////////   MANTENIMIENTO PRODUCTO  /////////////////////////////////

    public boolean grabarProducto(Producto miProducto) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into producto (producto, cantidad, precio_compra, id_prov) values('" + miProducto.getProducto()
                + "','" + miProducto.getCantidad()
                + "','" + miProducto.getPrecio()
                + "','" + miProducto.getId_prov()
                + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarProducto(Producto miProducto) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update producto set producto='" + miProducto.getProducto()
                + "', cantidad='" + miProducto.getCantidad()
                + "', precio_compra='" + miProducto.getPrecio()
                + "', id_prov='" + miProducto.getId_prov()
                + "' where id_prod='" + miProducto.getId_prod() + "'";

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarProductoVenta(Producto miProducto) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update producto set producto='" + miProducto.getProducto()
                + "', cantidad='" + miProducto.getCantidad()
                + "', precio_compra='" + miProducto.getPrecio()
                + "', id_prov='" + miProducto.getId_prov()
                + "' where id_prod='" + miProducto.getId_prod() + "'";

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

        public int modificarProductoR(int prod, int cant) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update producto set cantidad= producto.cantidad +'" + cant
                + "' where id_prod='" + prod + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
        }
    
    public int eliminarProducto(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from producto where id_prod='" + codigo + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Producto buscarProducto(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from producto where id_prod ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Producto miProducto = null;
        if (resultado != null) {
            resultado.next();
            miProducto = new Producto();
            miProducto.setId_prod(resultado.getInt("Id_prod"));
            miProducto.setProducto(resultado.getString("Producto"));
            miProducto.setCantidad(resultado.getInt("Cantidad"));
            miProducto.setPrecio(resultado.getDouble("precio_compra"));
            miProducto.setId_prov(resultado.getInt("id_prov"));
        }
        db.cerrarConexion();
        return miProducto;
    }

    public ArrayList listarProducto() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from producto ";
        ResultSet resultado = db.seleccion(query);
        Producto miProducto = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miProducto = new Producto();
            miProducto.setId_prod(resultado.getInt(1));
            miProducto.setProducto(resultado.getString(2));
            miProducto.setCantidad(resultado.getInt(3));
            miProducto.setPrecio(resultado.getDouble(4));
            miProducto.setId_prov(resultado.getInt(5));
            todos.add(miProducto);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarProductoBusqueda(String nombre) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from producto where producto='" + nombre + "'";
        ResultSet resultado = db.seleccion(query);
        Producto miProducto = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miProducto = new Producto();
            miProducto.setId_prod(resultado.getInt(1));
            miProducto.setProducto(resultado.getString(2));
            miProducto.setCantidad(resultado.getInt(3));
            miProducto.setPrecio(resultado.getDouble(4));
            miProducto.setId_prov(resultado.getInt(5));
            todos.add(miProducto);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarProductoBusquedaC(String[] codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        ArrayList todos = new ArrayList();
        for (int i = 0; i < codigo.length; i++) {
            String query = "select * from producto where id_prod=" + Integer.parseInt(codigo[i]);
            ResultSet resultado = db.seleccion(query);
            Producto miProducto = null;
            while (resultado.next()) {
                miProducto = new Producto();
                miProducto.setId_prod(resultado.getInt(1));
                miProducto.setProducto(resultado.getString(2));
                miProducto.setCantidad(resultado.getInt(3));
                miProducto.setPrecio(resultado.getDouble(4));
                miProducto.setId_prov(resultado.getInt(5));
                todos.add(miProducto);
            }
        }

        db.cerrarConexion();
        return todos;
    }

    ///////////////////////////////////MANTENIMIENTO FACTURAS /////////////////////////////////////////////////////
    public ArrayList listarIdFac() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select numero from factura ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {

            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }

    public boolean grabarFactura(Factura miFactura) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into factura (fecha,id_cliente,total,id_usuario) values('" + miFactura.getFecha() + "','" + miFactura.getId_cliente() + "'," + 0 + ",'" + miFactura.getId_gerente() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarFactura(Factura miFactura) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update factura set fecha='" + miFactura.getFecha() + "', id_cliente='" + miFactura.getId_cliente()
                + "' where numero='" + miFactura.getId_fact() + "'";

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int eliminarFactura(int cod_factura) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from factura where numero='" + cod_factura + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Factura buscarFactura(int codigo_fact) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from factura where numero ='" + codigo_fact + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Factura miFactura = null;
        if (resultado != null) {
            resultado.next();
            miFactura = new Factura();
            miFactura.setId_fact(resultado.getInt("Numero"));
            miFactura.setFecha(resultado.getDate("Fecha"));
            miFactura.setId_cliente(resultado.getString("Id_cliente"));

            miFactura.setTotal(resultado.getDouble("total"));
           

        }
        db.cerrarConexion();
        return miFactura;
    }

    public ArrayList listarFactura() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from factura ";
        ResultSet resultado = db.seleccion(query);
        Factura miFactura = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miFactura = new Factura();
            miFactura.setFecha(resultado.getDate(2));
            miFactura.setId_fact(resultado.getInt(1));
            miFactura.setId_cliente(resultado.getString(3));
            miFactura.setTotal(resultado.getDouble(4));
            miFactura.setId_gerente(resultado.getString(5));
            todos.add(miFactura);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarFacturaCliente(String ced) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from factura where id_cliente='" + ced + "'";
        ResultSet resultado = db.seleccion(query);
        Factura miFactura = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miFactura = new Factura();
            miFactura.setFecha(resultado.getDate(2));
            miFactura.setId_fact(resultado.getInt(1));
            miFactura.setId_cliente(resultado.getString(3));
            todos.add(miFactura);
        }
        db.cerrarConexion();
        return todos;
    }
    //////////////////////////////////////////logeo////////////////////////////////

    public boolean grabarLogeo(Logue logeo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into logeo values('" + logeo.getId_usuario() + "','" + logeo.getFecha() + "','" + logeo.getHora() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    ////////////////////////////////MANTENIMIENTO VENTAS ///////////////////////////////////////
    public boolean grabarVenta(Venta miVenta) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into venta values('" + miVenta.getNumero() + "','" + miVenta.getCantidad() + "','" + miVenta.getId_prod() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarVenta(Venta miVenta) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update venta set cantidad="
                + miVenta.getCantidad() + " where id_prod=" + miVenta.getId_prod() + " and numero=" + miVenta.getNumero();



        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int eliminarVenta(int cod_factura, int cod_prod) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from venta where numero=" + cod_factura + " and id_prod=" + cod_prod + "";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Venta buscarVenta(int cod_fact, int cod_prod) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from venta where numero =" + cod_fact + " and id_prod=" + cod_prod + "";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Venta miVenta = null;
        if (resultado != null) {
            resultado.next();
            miVenta = new Venta();
            miVenta.setNumero(resultado.getInt("Numero"));
            miVenta.setId_prod(resultado.getInt("id_prod"));
            miVenta.setCantidad(resultado.getInt("cantidad"));
            miVenta.setPrecio_v(resultado.getInt("precio_venta"));
            //// falta
        }
        db.cerrarConexion();
        return miVenta;
    }

    public ArrayList listarVenta() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from venta ";
        ResultSet resultado = db.seleccion(query);
        Venta miVenta = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miVenta = new Venta();
            miVenta.setNumero(resultado.getInt(1));
            miVenta.setCantidad(resultado.getInt(2));
            miVenta.setId_prod(resultado.getInt(3));

            todos.add(miVenta);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarVentaFactura(String factura) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from venta where numero=" + factura;
        ResultSet resultado = db.seleccion(query);
        Venta miVenta = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miVenta = new Venta();
            miVenta.setNumero(resultado.getInt(1));
            miVenta.setCantidad(resultado.getInt(2));
            miVenta.setId_prod(resultado.getInt(3));
            miVenta.setPrecio_v(resultado.getInt(4));
            todos.add(miVenta);
        }
        db.cerrarConexion();
        return todos;
    }
    ////////////////////////USUARIOS MANTENIMINETOS/////////////////////////

    public Usuario buscarUsuarioLogeo(String usuario, String contrasena) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from usuario where usuario ='" + usuario + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin  ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        String queryuno = "select * from usuario where pass ='" + contrasena + "'";

        ResultSet resultadouno = db.seleccion(queryuno);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
//        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Usuario miUsuario = null;
        if (resultado != null && resultadouno != null) {
            resultado.next();
            miUsuario = new Usuario();
            miUsuario.setCedula(resultado.getString("Cedula"));
            miUsuario.setNombre(resultado.getString("Nombre"));
            miUsuario.setApellido(resultado.getString("Apellido"));
            miUsuario.setNum_logueos(resultado.getInt("numero_logeos"));
            miUsuario.setUser(resultado.getString("usuario"));
        }
        db.cerrarConexion();
        return miUsuario;
    }

    public Usuario buscarUsuarioCajero(String ced) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        //      String query="select * from usuario where usuario ='" + usuario + "'";
        String queryuno = "select * from cajero where id_usuario ='" + ced + "'";

        ResultSet resultado = db.seleccion(queryuno);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Usuario miUsuario = null;
        if (resultado != null) { //&& resultadouno!=null) {
            resultado.next();
            miUsuario = new Usuario();
            miUsuario.setCedula(ced);
        }
        db.cerrarConexion();
        return miUsuario;
    }

    public int buscarTipoUsuario(String contrasena) throws SQLException {
        int opc = 0;
        OperacionesBase db = new OperacionesBase();
        String query = "select * from gerente where id_usuario ='" + contrasena + "'";
        String queryuno = "select * from cajero where id_usuario ='" + contrasena + "'";
        // String querydos="select * from administrador where id_usuario ='" + contrasena + "'";

        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        ResultSet resultadouno = db.seleccion(queryuno);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        //   ResultSet resultadodos = db.seleccion(querydos);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin

        Usuario miUsuario = null;
        if (resultado != null) { //&& resultadouno!=null) {
            resultado.next();
            opc = 1;
        } else {
            if (resultadouno != null) {
                resultadouno.next();
                opc = 2;
            } else {
                //     if(resultadodos!=null){
                //   resultadodos.next();
                // opc=3;
                //       }
            }
        }

        db.cerrarConexion();
        return opc;
    }

    public boolean grabarUsuario(Usuario miUser, int opc) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        Boolean resultado = false;
        String query = "insert into usuario values('" + miUser.getCedula() + "','" + miUser.getNombre() + "','" + miUser.getApellido()
                + "','" + 0 + "',' " + miUser.getUser() + "','" + miUser.getPass() + "')";
        String queryuno = "insert into gerente values('" + miUser.getCedula() + "')";
        String querydos = "insert into cajero values('" + miUser.getCedula() + "')";
        String querytres = "insert into administrador values('" + miUser.getCedula() + "')";
        switch (opc) {
            case 1:
                resultado = db.ingreso(query);
                db.ingresoUs(queryuno);

                db.cerrarConexion();
                // return resultado;
                break;
            case 2:
                resultado = db.ingreso(query);
                db.ingresoUs(querydos);

                db.cerrarConexion();
                // return resultado;
                break;
            case 3:
                resultado = db.ingreso(query);
                db.ingresoUs(querytres);

                db.cerrarConexion();
                //   return resultado;
                break;


        }
        return resultado;
    }

    public int modificarUsuario(Usuario miUser) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update usuario set nombre='" + miUser.getNombre() + "', apellido='" + miUser.getApellido()
                + "', usuario ='" + miUser.getUser() + "' where cedula='" + miUser.getCedula() + "'";

        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int eliminarUsuario(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from usuario where cedula='" + cedula + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Usuario buscarUsuario(String cedula) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from usuario where cedula ='" + cedula + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Usuario miUser = null;
        if (resultado != null) {
            resultado.next();
            miUser = new Usuario();
            miUser.setCedula(resultado.getString("Cedula"));
            miUser.setNombre(resultado.getString("Nombre"));
            miUser.setApellido(resultado.getString("Apellido"));
            miUser.setNum_logueos(resultado.getInt("numero_logeos"));
            miUser.setUser(resultado.getString("usuario"));

        }
        db.cerrarConexion();
        return miUser;
    }

    public ArrayList listarUsuario() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from usuario ";
        ResultSet resultado = db.seleccion(query);
        Usuario miUser = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miUser = new Usuario();
            miUser.setCedula(resultado.getString(1));
            miUser.setNombre(resultado.getString(2));
            miUser.setApellido(resultado.getString(3));
            miUser.setNum_logueos(resultado.getInt(4));
            miUser.setUser(resultado.getString(5));
            todos.add(miUser);
        }
        db.cerrarConexion();
        return todos;
    }
////////////////////////////////// PROVEEDORES/////////////////////////////////////////////////

    public boolean grabarProveedor(Proveedor miProveedor) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into proveedor (proveedor) values('" + miProveedor.getProveedor() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public int modificarProveedor(Proveedor miProveedor) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "update proveedor set proveedor='" + miProveedor.getProveedor() + "' where id_prov='" + miProveedor.getId_prov() + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public int eliminarProveedor(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "delete from proveedor where id_prov='" + codigo + "'";
        int resultado = db.modificacioneliminacion(query);
        db.cerrarConexion();
        return resultado;
    }

    public Proveedor buscarProveedor(int codigo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from proveedor where id_prov ='" + codigo + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Proveedor miProveedor = null;
        if (resultado != null) {
            resultado.next();
            miProveedor = new Proveedor();
            try {
                miProveedor.setId_prov(resultado.getInt("Id_prov"));
                miProveedor.setProveedor(resultado.getString("Proveedor"));
            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "Busqueda sin Resultados");
            }
        }
        db.cerrarConexion();
        return miProveedor;
    }

    public ArrayList listarProveedor() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from proveedor ";
        ResultSet resultado = db.seleccion(query);
        Proveedor miProveedor = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miProveedor = new Proveedor();
            miProveedor.setId_prov(resultado.getInt(1));
            miProveedor.setProveedor(resultado.getString(2));
            todos.add(miProveedor);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarIdsProv() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select id_prov from proveedor ";
        ResultSet resultado = db.seleccion(query);
        int micodigo = 0;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {

            micodigo = (resultado.getInt(1));
            todos.add(micodigo);
        }
        db.cerrarConexion();
        return todos;
    }
    //////////////////////LOGUEO////////////////////////////////////////////    

    public boolean grabarLogueo(Logue milogueo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into logeo values('" + milogueo.getId_usuario() + "','" + milogueo.getFecha() + "','" + milogueo.getHora() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }
    /*public int modificarLogueo(Logue milogueo) throws SQLException {
     OperacionesBase db = new OperacionesBase();
     String query="update cliente set nombre='" + milogueo.getNombre() + "', apellido='" + milogueo.getApellido() + "'";
        
     int resultado = db.modificacioneliminacion(query);
     db.cerrarConexion();
     return resultado;
     }*/
    /* public int eliminarLogueo(String cedula) throws SQLException {
     OperacionesBase db = new OperacionesBase();
     String query="delete from cliente where cedula='" + cedula + "'";
     int resultado = db.modificacioneliminacion(query);
     db.cerrarConexion();
     return resultado;
     }*/

    public Logue buscarLogueo(String id_usuario) throws SQLException, ParseException {
        SimpleDateFormat formateo_fecha = new SimpleDateFormat("yyyy/MM/dd");
        OperacionesBase db = new OperacionesBase();
        String query = "select * from logeo where id_usuario ='" + id_usuario + "'";
        ResultSet resultado = db.seleccion(query);//cada tupla, recibir reulset y pasar al array pa q no se borre x cerrarse la conexin
        Logue milogueo = null;
        if (resultado != null) {
            resultado.next();
            milogueo = new Logue();
            milogueo.setId_usuario(resultado.getString("id_usuario"));
            milogueo.setFecha(formateo_fecha.parse(resultado.getString("fecha")));
            //    milogueo.setHora(resultado.getString("hora"));
        }
        db.cerrarConexion();
        return milogueo;
    }

    public ArrayList listarLogueo() throws SQLException, ParseException {
        SimpleDateFormat formateo_fecha = new SimpleDateFormat("yyyy/MM/dd");
        OperacionesBase db = new OperacionesBase();
        String query = "select * from logeo ";
        ResultSet resultado = db.seleccion(query);
        Logue milogueo = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            milogueo = new Logue();
            milogueo.setId_usuario(resultado.getString(1));
            milogueo.setFecha(formateo_fecha.parse(resultado.getString(2)));
            //   milogueo.setHora(resultado.getString(3));
            todos.add(milogueo);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarClientesEstaditicas() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "{ ? = call est_clientes() }";
        Connection var = db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        ClienteEstadistica miCliente = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miCliente = new ClienteEstadistica();
            miCliente.setCedula(resultado.getString(1));
            miCliente.setNombre(resultado.getString(2));
            miCliente.setApellido(resultado.getString(3));
            miCliente.setCompras(resultado.getString(4));
            miCliente.setNumero(resultado.getString(5));
            miCliente.setPromedio(resultado.getString(6));
            todos.add(miCliente);
        }

        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarGerentes() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select cedula,nombre,apellido,numero_logeos,usuario,pass from gerente left outer join usuario on gerente.id_usuario = usuario.cedula";
        ResultSet resultado = db.seleccion(query);
        Usuario miUsuario = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miUsuario = new Usuario();
            miUsuario.setCedula(resultado.getString(1));
            miUsuario.setNombre(resultado.getString(2));
            miUsuario.setApellido(resultado.getString(3));
            miUsuario.setNum_logueos(resultado.getInt(4));
            miUsuario.setUser(resultado.getString(5));
            todos.add(miUsuario);
        }
        db.cerrarConexion();
        return todos;
    }

//    /////////////////////////////////////////////////////////////////////////////
    public boolean grabarLogue(Logue miLogueo) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into logeo values('" + miLogueo.getFecha() + "','" + miLogueo.getHora()  + "','" +miLogueo.getId_usuario() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public boolean grabarCompra(Compra miCompra) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "insert into recibe values('" + miCompra.getId_producto() + "','" + miCompra.getId_usuario() + "','" + miCompra.getCantidad()
                + "','" + miCompra.getFecha() + "')";
        Boolean resultado = db.ingreso(query);
        db.cerrarConexion();
        return resultado;
    }

    public ArrayList listarVentasDescuento(int descuento, int numero) throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "{ ? = call calcular_descuento(" + descuento + "," + numero + ")}";
        Connection var = db.db.getConnection();
        CallableStatement stmt = var.prepareCall(query);
        stmt.registerOutParameter(1, Types.OTHER);
        ResultSet resultado = db.callProcedure(stmt);
        ventasDescuento miVD = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miVD = new ventasDescuento();
            miVD.setNumero(Integer.parseInt(resultado.getString(1)));
            miVD.setCantidad(Integer.parseInt(resultado.getString(2)));
            miVD.setId_prod(Integer.parseInt(resultado.getString(3)));
            miVD.setPrecio_venta(Double.parseDouble(resultado.getString(4)));
            miVD.setPrecio_d(Double.parseDouble(resultado.getString(5)));
            miVD.setPrecio_t(Double.parseDouble(resultado.getString(6)));
            todos.add(miVD);
        }
        db.cerrarConexion();
        return todos;
    }

    public ArrayList listarCompras() throws SQLException {
        OperacionesBase db = new OperacionesBase();
        String query = "select * from recibe ";
        ResultSet resultado = db.seleccion(query);
        Compra miCompra = null;
        ArrayList todos = new ArrayList();
        while (resultado.next()) {
            miCompra = new Compra();
            miCompra.setId_producto(resultado.getString(1));
            miCompra.setId_usuario(resultado.getString(2));
            miCompra.setCantidad(resultado.getString(3));
            miCompra.setFecha(resultado.getString(4));
            todos.add(miCompra);
        }
        db.cerrarConexion();
        return todos;
    }
}